//=============================================================================
/**
 * @file	opd_scene1.c
 * @brief	オープニングデモシーン1	クレジット〜伝説ポケシルエット
 * @author	Nozomu Saito
 * @date    2009.03.20
 */
//=============================================================================

#include "opening_demo_local.h"
#include "opd_scene1.h"

#include "system/wipe.h"
#include "system/arc_tool.h"
#include "system/clact_tool.h"		//for REND_OAMTrans
#include "op_demo.naix"

#include "opd_def.h"

#define ACT_ID_S1	(1)
#define S1_ACT_PALETTE_NUM	(2)

#define DEF_POS_X		(128)
#define DEF_POS_Y		(96)

//グラフィックデータ依存
#define ANM_NO_SUN_MOON		(0)
#define ANM_NO_MONS			(1)

//シーン1		クレジット〜タイトル表示
#define	CR_FRAME				(GF_BGL_FRAME0_S)		//コピーライト
#define	GF_LOGO_FRAME			(GF_BGL_FRAME1_S)		//ゲーフリロゴ
#define	TITLE_FRAME				(GF_BGL_FRAME2_S)		//タイトル
#define	SUB_BACK_FRAME			(GF_BGL_FRAME3_S)		//背景

#define	GAME_FREAK_FRAME	(GF_BGL_FRAME0_M)			//ゲーフリ
#define	TREE_FRONT_FRAME	(GF_BGL_FRAME1_M)			//手前木
#define	TREE_BACK_FRAME		(GF_BGL_FRAME2_M)			//奥木
#define	MAIN_BACK_FRAME			(GF_BGL_FRAME3_M)			//背景

//シーケンス
typedef enum{
	SEQ_CRED_APP,
	SEQ_CRED_DISP,
	SEQ_CRED_FADE_WAIT,
	SEQ_LOGO_APP,
	SEQ_LOGO_DISP,
	SEQ_GF_APP,
	SEQ_GF_DISP,
	SEQ_GF_FADE_WAIT,
	SEQ_MONS_APP,
	SEQ_MONS_WAIT,
	SEQ_WHITE_OUT_WAIT,
};

static void SetVramBank(void);
static void VBlanikFunc(void* work);

static void Scene1BgSet(OPD_WK_PTR wk);
static void Scene1GraLoad(GF_BGL_INI *bgl);
static void SetScene1Start(OPD_WK_PTR wk);
static void Scene1_Init(OPD_WK_PTR wk, SCENE1_WORK *scene);
static BOOL Scene1_Main(OPD_WK_PTR wk, SCENE1_WORK *scene, const int inCounter);
static void Scene1_End(OPD_WK_PTR wk, SCENE1_WORK *scene);

static void InitAct(OPD_WK_PTR wk, SCENE1_WORK *scene);
static void EndAct(OPD_WK_PTR wk, SCENE1_WORK *scene);
static void SetActor( OPD_WK_PTR wk, SCENE1_WORK *scene );

//リソースマネージャー登録数テーブル
static const u8 ResEntryNumTbl[RESOURCE_NUM] = {
	1,			//キャラリソース
	1,			//パレットリソース
	1,			//セルリソース
	1,			//セルアニメリソース
};

//--------------------------------------------------------------------------------------------
/**
 * シーンメイン関数
 *
 * @param	wk			ワーク
 * @param	sc_wk		シーンワークポインタ
 *
 * @return	BOOL		TRUEで終了
 */
//--------------------------------------------------------------------------------------------
BOOL OPD_Scene1(OPD_WK_PTR wk, void *sc_wk)
{
	SCENE1_WORK *scene = (SCENE1_WORK *)sc_wk;
	u8 *seq = &(scene->Seq);

	if (OPD_GetSkipFlg(wk)){
		(*seq) = 2;		//スキップ実行
	}

	switch(*seq){
	case 0:		//初期化・グラフィックロード
		Scene1_Init(wk, scene);
		(*seq)++;
		break;
	case 1:			//メイン
		if ( Scene1_Main( wk, scene, OPD_GetFrmCounter(wk) ) ){
			(*seq)++;
		}
		break;
	case 2:			//終了
		Scene1_End(wk, scene);

		return TRUE;
	}
	return FALSE;
}

//--------------------------------------------------------------------------------------------
/**
 * ＶＲＡＭ設定
 *
 * @param	none
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void SetVramBank(void)
{
	GF_BGL_DISPVRAM vramSetTable = {
		GX_VRAM_BG_128_B,				// メイン2DエンジンのBG
		GX_VRAM_BGEXTPLTT_NONE,			// メイン2DエンジンのBG拡張パレット
		GX_VRAM_SUB_BG_128_C,			// サブ2DエンジンのBG
		GX_VRAM_SUB_BGEXTPLTT_NONE,	// サブ2DエンジンのBG拡張パレット
		GX_VRAM_OBJ_80_EF,				// メイン2DエンジンのOBJ
		GX_VRAM_OBJEXTPLTT_NONE,		// メイン2DエンジンのOBJ拡張パレット
		GX_VRAM_SUB_OBJ_16_I,			// サブ2DエンジンのOBJ
		GX_VRAM_SUB_OBJEXTPLTT_NONE,	// サブ2DエンジンのOBJ拡張パレット
		GX_VRAM_TEX_0_A,				// テクスチャイメージスロット
		GX_VRAM_TEXPLTT_0_G				// テクスチャパレットスロット
	};
	GF_Disp_SetBank( &vramSetTable );
}

//--------------------------------------------------------------------------------------------
/**
 * ＶＢＬＡＮＫ関数
 *
 * @param	work			ワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void VBlankFunc(void* work)
{

	OPD_WK_PTR wk = work;
	GF_BGL_VBlankFunc( OPD_GetBGL(wk) );

	// レンダラ共有OAMマネージャVram転送
	REND_OAMTrans();
}

//--------------------------------------------------------------------------------------------
/**
 * シーン初期化
 *
 * @param	wk			ワーク
 * @param	scene		シーンワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void Scene1_Init(OPD_WK_PTR wk, SCENE1_WORK *scene)
{
	GF_BGL_INI *bgl;
	bgl = OPD_GetBGL(wk);

	// 読み込み開始位置を初期化
	CharLoadStartAll();
	PlttLoadStartAll();

	//３Ｄ描画スイッチ(下画面がメイン)
	sys.disp3DSW = DISP_3D_TO_SUB;
	GF_Disp_DispSelect();

///	SetVramBank();		//Vバンクセット

	Scene1BgSet(wk);
	OPD_ResetDispEff(wk);

	sys_VBlankFuncChange(VBlankFunc,(void*)wk);

	//グラフィックロード
	Scene1GraLoad(bgl);

	//アクター
	InitAct(wk, scene);
	SetActor( wk, scene );

	//初期状態セット
	SetScene1Start(wk);

	scene->InitOK = 1;	//init通過
}

//--------------------------------------------------------------------------------------------
/**
 * シーン再生メイン
 *
 * @param	wk			ワーク
 * @param	scene		シーンワーク
 * @param	inCounter	カウンタ
 *
 * @return	BOOL 		TRUEで終了
 */
//--------------------------------------------------------------------------------------------
static BOOL Scene1_Main(OPD_WK_PTR wk, SCENE1_WORK *scene, const int inCounter)
{
	u8 count;
	GF_BGL_INI *bgl = OPD_GetBGL(wk);
	DISP_EFF_WORK *dew;
	dew = GetDispEffWorkAdr(wk);
	count = OPD_GetSceneCount(wk);

	switch( OPD_GetSceneSeq(wk) ){
	case SEQ_CRED_APP:			//クレジット出る
		if ( count >= S1_CONT_CRED_APP ){
			GF_Disp_GXS_VisibleControl( GX_PLANEMASK_BG0, VISIBLE_ON );
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_CRED_DISP:			//クレジット表示
		if ( count >= S1_WAIT_CRED_DISP ){
			//フェードリクエスト
			OPD_SetAlphaBlend( &dew->Blend, GX_BLEND_PLANEMASK_BG0, GX_BLEND_PLANEMASK_BD,
					S1_CRED_ALPHA_OUT_SYNC, FADE_TYPE_OUT, FALSE );
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_CRED_FADE_WAIT:			//クレジットフェード中
		if (dew->Blend.End){
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_LOGO_APP:
		//ロゴ・ゲーフリ出る
		if ( count >= S1_CONT_LOGO_APP ){
			//スキップ許可
			*(scene->SkipOKPtr) = 1;
			GF_Disp_GXS_VisibleControl( GX_PLANEMASK_BG0, VISIBLE_OFF );
			GF_Disp_GXS_VisibleControl( GX_PLANEMASK_BG1, VISIBLE_ON );		//ロゴ
			GF_Disp_GX_VisibleControl( GX_PLANEMASK_BG0, VISIBLE_ON );		//ゲーフリ

			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_LOGO_DISP:			//ロゴ表示
		if ( count >= S1_WAIT_LOGO_DISP ){
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_GF_APP:
		//下画面ゲーフリ・背景
		if ( count >= S1_CONT_GF_APP ){
			int mask = GX_PLANEMASK_BG1|GX_PLANEMASK_BG2|GX_PLANEMASK_BG3;
			GF_Disp_GX_VisibleControl( mask, VISIBLE_ON );
			///GF_Disp_GXS_VisibleControl( GX_PLANEMASK_BG1, VISIBLE_OFF );
			GF_Disp_GXS_VisibleControl( GX_PLANEMASK_BG3, VISIBLE_ON );

			//月（太陽）表示
			CLACT_SetDrawFlag(scene->SunMoon, 1);
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_GF_DISP:		//ゲーフリ表示
///		//輝度戻す
///		WIPE_ResetBrightness( WIPE_DISP_MAIN );
		if ( count >= S1_WAIT_GF_DISP ){
			int mask = GX_BLEND_PLANEMASK_BG3|GX_BLEND_PLANEMASK_BG2|
						GX_BLEND_PLANEMASK_BG1|GX_BLEND_PLANEMASK_OBJ;
			//フェードリクエスト
			OPD_SetAlphaBlend( &dew->Blend, GX_BLEND_PLANEMASK_BG0, mask,
					S1_GF_ALPHA_OUT_SYNC, FADE_TYPE_OUT, TRUE );
			OPD_SetAlphaBlend( &dew->BlendSub, GX_BLEND_PLANEMASK_BG1, mask,
					S1_GF_ALPHA_OUT_SYNC, FADE_TYPE_OUT, FALSE );

			//スクロールリクエスト
			OPD_ReqScroll( bgl, &dew->ScrlMng, TREE_FRONT_FRAME,
						0, -S1_TREE_F_SCRL_Y, S1_TREE_F_SCRL_Y_SYNC );
			OPD_ReqScroll( bgl, &dew->ScrlMng, TREE_BACK_FRAME,
						0, -S1_TREE_B_SCRL_Y, S1_TREE_B_SCRL_Y_SYNC );
			//月（太陽）アニメ開始
			OPD_StartDispAct(scene->SunMoon, 1);
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_GF_FADE_WAIT:		//クロスフェード中
		if ( (dew->Blend.End)&&(dew->BlendSub.End)&&
			 OPD_CheckScrollEnd(&dew->ScrlMng, TREE_FRONT_FRAME)&&
			 OPD_CheckScrollEnd(&dew->ScrlMng, TREE_BACK_FRAME) ){
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_MONS_APP:
		if (count >= S1_CONT_MONS_APP){
			//ホウオウ・ルギア登場アニメ開始
			OPD_StartDispAct(scene->Mons, 1);
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_MONS_WAIT:
		if ( count >= S1_WAIT_MONS_DISP ){		//ポケアニメ終了待ち
			//ホワイトアウト
			WIPE_SYS_Start(	WIPE_PATTERN_WMS, WIPE_TYPE_FADEOUT,
							WIPE_TYPE_FADEOUT,WIPE_FADE_WHITE,S1_WHITE_OUT_SYNC,1,HEAPID_OP_DEMO );
			OPD_IncSceneSeq(wk);		//シーケンスシフト
		}
		break;
	case SEQ_WHITE_OUT_WAIT:
		//ホワイトアウト待ち
		if ( WIPE_SYS_EndCheck() ){
			return TRUE;
		}
		break;
	}
	return FALSE;
}

//--------------------------------------------------------------------------------------------
/**
 * シーン終了
 *
 * @param	wk		ワーク
 * @param	scene	シーンワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void Scene1_End(OPD_WK_PTR wk, SCENE1_WORK *scene)
{
	GF_BGL_INI *bgl;
	bgl = OPD_GetBGL(wk);
	sys_VBlankFuncChange( NULL, NULL );	// VBlankセット

	if (scene->InitOK){
		//アクター解放
		EndAct(wk, scene);
		//bgl解放
		GF_BGL_BGControlExit( bgl, CR_FRAME );
		GF_BGL_BGControlExit( bgl, GF_LOGO_FRAME );
		GF_BGL_BGControlExit( bgl, TITLE_FRAME );
		GF_BGL_BGControlExit( bgl, SUB_BACK_FRAME );

		GF_BGL_BGControlExit( bgl, GAME_FREAK_FRAME );
		GF_BGL_BGControlExit( bgl, TREE_FRONT_FRAME );
		GF_BGL_BGControlExit( bgl, TREE_BACK_FRAME );
		GF_BGL_BGControlExit( bgl, MAIN_BACK_FRAME );

		scene->InitOK = 0;
	}
}

//--------------------------------------------------------------------------------------------
/**
 * BGセット
 *
 * @param	wk		OBJワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void Scene1BgSet(OPD_WK_PTR wk)
{
	GF_BGL_INI *bgl;
	bgl = OPD_GetBGL(wk);

	{	// BGシステム設定
		GF_BGL_SYS_HEADER BGsys_data = {
			GX_DISPMODE_GRAPHICS,GX_BGMODE_0,GX_BGMODE_0,GX_BG0_AS_2D
		};
		GF_BGL_InitBG( &BGsys_data );
	}

	//--サブ--
	{	// コピーライト ＢＧ設定(サブ0)
		GF_BGL_BGCNT_HEADER SBG0_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000,		//ロゴと同じキャラベース
			GX_BG_EXTPLTT_01, 0, 0, 0, FALSE			//プライオリティ0
		};
		GF_BGL_BGControlSet( bgl, CR_FRAME, &SBG0_Data, GF_BGL_MODE_TEXT );
	}

	{	// ゲーフリロゴ ＢＧ設定(サブ1)
		GF_BGL_BGCNT_HEADER SBG1_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x0800, GX_BG_CHARBASE_0x04000,		//クレジットと同じキャラベース
			GX_BG_EXTPLTT_01, 1, 0, 0, FALSE			//プライオリティ1
		};
		GF_BGL_BGControlSet( bgl, GF_LOGO_FRAME, &SBG1_Data, GF_BGL_MODE_TEXT );
	}

	{	// ベース背景 ＢＧ設定(サブ2)
		GF_BGL_BGCNT_HEADER SBG2_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x1000, GX_BG_CHARBASE_0x0c000,
			GX_BG_EXTPLTT_01, 2, 0, 0, FALSE			//プライオリティ2
		};
		GF_BGL_BGControlSet( bgl, TITLE_FRAME, &SBG2_Data, GF_BGL_MODE_TEXT );
	}

	{	// ベース背景 ＢＧ設定(サブ3)
		GF_BGL_BGCNT_HEADER SBG3_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x1800, GX_BG_CHARBASE_0x10000,
			GX_BG_EXTPLTT_01, 3, 0, 0, FALSE			//プライオリティ3
		};
		GF_BGL_BGControlSet( bgl, SUB_BACK_FRAME, &SBG3_Data, GF_BGL_MODE_TEXT );
	}

	//--メイン--
	{	// ゲーフリ ＢＧ設定(メイン0)
		GF_BGL_BGCNT_HEADER MBG0_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000,
			GX_BG_EXTPLTT_01, 0, 0, 0, FALSE			//プライオリティ0
		};
		GF_BGL_BGControlSet( bgl, GAME_FREAK_FRAME, &MBG0_Data, GF_BGL_MODE_TEXT );
	}

	{	// ベース背景 ＢＧ設定(メイン1)
		GF_BGL_BGCNT_HEADER MBG1_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x0800, GX_BG_CHARBASE_0x08000,				//背景キャラベースを統一
			GX_BG_EXTPLTT_01, 1, 0, 0, FALSE			//プライオリティ1
		};
		GF_BGL_BGControlSet( bgl, TREE_FRONT_FRAME, &MBG1_Data, GF_BGL_MODE_TEXT );
	}

	{	// ベース背景 ＢＧ設定(メイン2)
		GF_BGL_BGCNT_HEADER MBG2_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x1000, GX_BG_CHARBASE_0x08000,				//背景キャラベースを統一
			GX_BG_EXTPLTT_01, 2, 0, 0, FALSE			//プライオリティ2
		};
		GF_BGL_BGControlSet( bgl, TREE_BACK_FRAME, &MBG2_Data, GF_BGL_MODE_TEXT );
	}

	{	// ベース背景 ＢＧ設定(メイン3)
		GF_BGL_BGCNT_HEADER MBG3_Data = {
			0, 0, 0x800, 0,
			GF_BGL_SCRSIZ_256x256, GX_BG_COLORMODE_16,
			GX_BG_SCRBASE_0x1800, GX_BG_CHARBASE_0x08000,				//背景キャラベースを統一
			GX_BG_EXTPLTT_01, 3, 0, 0, FALSE			//プライオリティ3
		};
		GF_BGL_BGControlSet( bgl, MAIN_BACK_FRAME, &MBG3_Data, GF_BGL_MODE_TEXT );
	}
/**
	GF_BGL_BackGroundColorSet( GF_BGL_FRAME0_M, 0x0000 );	//背景色初期化（メイン画面）
	GF_BGL_BackGroundColorSet( GF_BGL_FRAME0_S, 0x0000 );	//背景色初期化（サブ画面）;
*/
}

//--------------------------------------------------------------------------------------------
/**
 * BGロード
 *
 * @param	bgl		BGL
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void Scene1GraLoad(GF_BGL_INI *bgl)
{
	//--ゲーフリロゴ・クレジットデータロード
	//キャラ
	ArcUtil_BgCharSet(ARC_OP_DEMO, NARC_op_demo_demo_logo_u_lz_ccgr,
						bgl, GF_LOGO_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
	ArcUtil_BgCharSet(ARC_OP_DEMO, NARC_op_demo_demo_logo_d_lz_ccgr,
						bgl, GAME_FREAK_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
	//スクリーン
	ArcUtil_ScrnSet(ARC_OP_DEMO, NARC_op_demo_demo_logo_u_lz_cscr,
						bgl, GF_LOGO_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
	ArcUtil_ScrnSet(ARC_OP_DEMO, NARC_op_demo_demo_logo_d_lz_cscr,
						bgl, GAME_FREAK_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
	ArcUtil_ScrnSet(ARC_OP_DEMO, NARC_op_demo_demo_credit_u_lz_cscr,
						bgl, CR_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
/**
	//パレット
	ArcUtil_PalSet( ARC_OP_DEMO, NARC_op_demo_demo_logo_u_nclr,
						PALTYPE_SUB_BG, 0, PAL_ONE_SIZE*16*2, HEAPID_OP_DEMO );		//サブ　0番に16色2本ロード
	ArcUtil_PalSet( ARC_OP_DEMO, NARC_op_demo_demo_logo_d_nclr,
						PALTYPE_MAIN_BG, 0, PAL_ONE_SIZE*16*1, HEAPID_OP_DEMO );	//メイン	//0番に16色1本ロード
*/
	//バージョン分岐
	{
		int chr[2];
		int scr[4];
		int pal[2];
		if (PM_VERSION == VERSION_GOLD){
			chr[0] = NARC_op_demo_demo_yoake_u_lz_ccgr;
			chr[1] = NARC_op_demo_demo_yoake_d_lz_ccgr;
			scr[0] = NARC_op_demo_demo_yoake1_u_lz_cscr;
			scr[1] = NARC_op_demo_demo_yoake3_d_lz_cscr;
			scr[2] = NARC_op_demo_demo_yoake2_d_lz_cscr;
			scr[3] = NARC_op_demo_demo_yoake1_d_lz_cscr;
			pal[0] = NARC_op_demo_demo_yoake_u_nclr;
			pal[1] = NARC_op_demo_demo_yoake_d_nclr;
		}else{
			chr[0] = NARC_op_demo_demo_yozora_u_lz_ccgr;
			chr[1] = NARC_op_demo_demo_yozora_d_lz_ccgr;
			scr[0] = NARC_op_demo_demo_yozora1_u_lz_cscr;
			scr[1] = NARC_op_demo_demo_yozora3_d_lz_cscr;
			scr[2] = NARC_op_demo_demo_yozora2_d_lz_cscr;
			scr[3] = NARC_op_demo_demo_yozora1_d_lz_cscr;
			pal[0] = NARC_op_demo_demo_yozora_u_nclr;
			pal[1] = NARC_op_demo_demo_yozora_d_nclr;
		}

		//--背景ロード
		ArcUtil_BgCharSet(ARC_OP_DEMO, chr[0],
							bgl, SUB_BACK_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
		ArcUtil_BgCharSet(ARC_OP_DEMO, chr[1],
							bgl, MAIN_BACK_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
		//スクリーン
		ArcUtil_ScrnSet(ARC_OP_DEMO, scr[0],
							bgl, SUB_BACK_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
		ArcUtil_ScrnSet(ARC_OP_DEMO, scr[1],
							bgl, MAIN_BACK_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
		ArcUtil_ScrnSet(ARC_OP_DEMO, scr[2],
							bgl, TREE_BACK_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
		ArcUtil_ScrnSet(ARC_OP_DEMO, scr[3],
							bgl, TREE_FRONT_FRAME, 0, 0, TRUE, HEAPID_OP_DEMO);
		//パレット
		ArcUtil_PalSet( ARC_OP_DEMO, pal[0],
							PALTYPE_SUB_BG, 0, PAL_ONE_SIZE*16*10, HEAPID_OP_DEMO );	//サブ　0番に16色10本ロード
		ArcUtil_PalSet( ARC_OP_DEMO, pal[1],
							PALTYPE_MAIN_BG, 0, PAL_ONE_SIZE*16*10, HEAPID_OP_DEMO );	//メイン　0番に16色10本ロード
	}
/**
	//スクリーンパレット変更(パレット番号を2番にする)
	GF_BGL_ScrPalChange( bgl, SUB_BACK_FRAME, 0, 0, 32, 24, 2 );
	//スクリーンパレット変更(パレット番号を1番にする)
	GF_BGL_ScrPalChange( bgl, MAIN_BACK_FRAME, 0, 0, 32, 24, 1 );
	//スクリーンパレット変更(パレット番号を2番にする)
	GF_BGL_ScrPalChange( bgl, TREE_FRONT_FRAME, 0, 0, 32, 24, 2 );
	GF_BGL_ScrPalChange( bgl, TREE_BACK_FRAME, 0, 0, 32, 24, 2 );

	GF_BGL_LoadScreenV_Req(bgl, SUB_BACK_FRAME);
	GF_BGL_LoadScreenV_Req(bgl, MAIN_BACK_FRAME);
	GF_BGL_LoadScreenV_Req(bgl, TREE_FRONT_FRAME);
	GF_BGL_LoadScreenV_Req(bgl, TREE_BACK_FRAME);
*/

	//--初期ＢＧ設定
	//BG非表示
	{
		int mask = GX_PLANEMASK_BG0|GX_PLANEMASK_BG1|GX_PLANEMASK_BG2|GX_PLANEMASK_BG3;
		GF_Disp_GX_VisibleControl( mask, VISIBLE_OFF );
		GF_Disp_GXS_VisibleControl( mask, VISIBLE_OFF );
	}

	//ベース背景とコピーライトをブレンド
///	G2_SetBlendAlpha( BLD_MASK_COPY_LIGHT, BLD_MASK_BACK_BASE_M, 0, 16);

	OS_WaitIrq(TRUE, OS_IE_V_BLANK); 	// Ｖブランク待ち

	GF_Disp_DispOn();
}

//--------------------------------------------------------------------------------------------
/**
 * シーン開始前セットアップ
 *
 * @param	wk		ワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void SetScene1Start(OPD_WK_PTR wk)
{
	//アクター初期状態セット
	;
	//ＢＧ初期状態セット
	{
		//全ＢＧ非表示
		;
	}

	GF_BGL_BackGroundColorSet( GF_BGL_FRAME0_M, 0x0000 );	//背景色初期化（メイン画面）
	GF_BGL_BackGroundColorSet( GF_BGL_FRAME0_S, 0x0000 );	//背景色初期化（サブ画面）

	//マスター輝度を戻す
	WIPE_ResetBrightness( WIPE_DISP_SUB );
	WIPE_ResetBrightness( WIPE_DISP_MAIN );
/**
	//下画面真っ黒
	WIPE_SetBrightness( WIPE_DISP_MAIN,WIPE_FADE_BLACK );
*/
}


/////////////////////////////////////
//セルアクター

//--------------------------------------------------------------------------------------------
/**
 * セルアクター初期化
 *
 * @param	wk		ワーク
 * @param	scene	シーンワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void InitAct(OPD_WK_PTR wk, SCENE1_WORK *scene)
{
	const int heapid = HEAPID_OP_DEMO;
	CLACT_U_RES_MANAGER_PTR *res_man;
	//リソースマネージャー初期化
	OPD_InitResMan(wk, ResEntryNumTbl);

	res_man = OPD_GetResManPtr(wk);

	//バージョン分岐
	{
		int chr, pal, cel, anm;
		if (PM_VERSION == VERSION_GOLD){
			chr = NARC_op_demo_demo_obj_sun_d_lz_ccgr;
			pal = NARC_op_demo_demo_obj_sun_d_nclr;
			cel = NARC_op_demo_demo_obj_sun_d_lz_ccer;
			anm = NARC_op_demo_demo_obj_sun_d_lz_canr;
		}else{
			chr = NARC_op_demo_demo_obj_moon_d_lz_ccgr;
			pal = NARC_op_demo_demo_obj_moon_d_nclr;
			cel = NARC_op_demo_demo_obj_moon_d_lz_ccer;
			anm = NARC_op_demo_demo_obj_moon_d_lz_canr;
		}

		//--chara読み込み
		scene->ResObjTbl[CLACT_U_CHAR_RES] = CLACT_U_ResManagerResAddArcChar(
				 							res_man[CLACT_U_CHAR_RES],
											ARC_OP_DEMO, chr,
											TRUE, ACT_ID_S1, NNS_G2D_VRAM_TYPE_2DMAIN, heapid);
		//--pal読み込み
		scene->ResObjTbl[CLACT_U_PLTT_RES] = CLACT_U_ResManagerResAddArcPltt(
											res_man[CLACT_U_PLTT_RES],
											ARC_OP_DEMO, pal,
											FALSE, ACT_ID_S1, NNS_G2D_VRAM_TYPE_2DMAIN, S1_ACT_PALETTE_NUM, heapid);
		//--cell読み込み
		scene->ResObjTbl[CLACT_U_CELL_RES] = CLACT_U_ResManagerResAddArcKindCell(
											res_man[CLACT_U_CELL_RES],
											ARC_OP_DEMO, cel,
											TRUE, ACT_ID_S1, CLACT_U_CELL_RES, heapid);
		//--同じ関数でanim読み込み
		scene->ResObjTbl[CLACT_U_CELLANM_RES] = CLACT_U_ResManagerResAddArcKindCell(
											res_man[CLACT_U_CELLANM_RES],
											ARC_OP_DEMO, anm,
											TRUE, ACT_ID_S1, CLACT_U_CELLANM_RES, heapid);
	}
	// リソースマネージャーから転送
	// Chara転送
	CLACT_U_CharManagerSet( scene->ResObjTbl[CLACT_U_CHAR_RES] );
	// パレット転送
	CLACT_U_PlttManagerSet( scene->ResObjTbl[CLACT_U_PLTT_RES] );

	GF_Disp_GX_VisibleControl( GX_PLANEMASK_OBJ, VISIBLE_ON );		// MAIN DISP OBJ ON
}

//--------------------------------------------------------------------------------------------
/**
 * セルアクター終了
 *
 * @param	wk		ワーク
 * @param	scene	シーンワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void EndAct(OPD_WK_PTR wk, SCENE1_WORK *scene)
{
	//アクター解放
	CLACT_Delete(scene->SunMoon);
	CLACT_Delete(scene->Mons);
	// キャラ転送マネージャー破棄
	CLACT_U_CharManagerDelete(scene->ResObjTbl[CLACT_U_CHAR_RES]);
	// パレット転送マネージャー破棄
	CLACT_U_PlttManagerDelete(scene->ResObjTbl[CLACT_U_PLTT_RES]);

	// キャラ・パレット・セル・セルアニメのリソースマネージャー破棄
	OPD_DelResMan(wk);
}

//--------------------------------------------------------------------------------------------
/**
 * セルアクターをセット
 *
 * @param	wk		ワーク
 * @param	scene	シーンワーク
 *
 * @return	none
 */
//--------------------------------------------------------------------------------------------
static void SetActor( OPD_WK_PTR wk, SCENE1_WORK *scene )
{
	CLACT_HEADER			cl_act_header;
	CLACT_ADD add;

	//月ＯＲ太陽
	OPD_MakeClActHeader( ACT_ID_S1, wk, 1, NNS_G2D_VRAM_TYPE_2DMAIN, &add, &cl_act_header );
	add.mat.x = FX32_ONE * DEF_POS_X;
	add.mat.y = FX32_ONE * DEF_POS_Y;
	scene->SunMoon = CLACT_Add(&add);
	CLACT_SetAnmFlag(scene->SunMoon,0);
	CLACT_SetDrawFlag(scene->SunMoon, 0);	//非表示
	CLACT_AnmChg( scene->SunMoon, ANM_NO_SUN_MOON );

	//ホウオウＯＲルギア
	OPD_MakeClActHeader( ACT_ID_S1, wk, 0, NNS_G2D_VRAM_TYPE_2DMAIN, &add, &cl_act_header );
	add.mat.x = FX32_ONE * DEF_POS_X;
	add.mat.y = FX32_ONE * DEF_POS_Y;
	scene->Mons = CLACT_Add(&add);
	CLACT_SetAnmFlag(scene->Mons,0);
	CLACT_SetDrawFlag(scene->Mons, 0);	//非表示
	CLACT_AnmChg( scene->Mons, ANM_NO_MONS );

	//倍角フラグ
	CLACT_SetAffineParam(scene->Mons, CLACT_AFFINE_DOUBLE);
}